home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / access / nbtree / nbtstrat.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  3.0 KB  |  133 lines

  1. /*
  2.  *  btstrat.c -- Srategy map entries for the btree indexed access method
  3.  */
  4.  
  5. #include "tmp/c.h"
  6. #include "tmp/postgres.h"
  7.  
  8. #include "storage/page.h"
  9. #include "storage/bufpage.h"
  10.  
  11. #include "utils/log.h"
  12. #include "utils/rel.h"
  13. #include "utils/excid.h"
  14.  
  15. #include "access/genam.h"
  16. #include "access/isop.h"
  17. #include "access/nbtree.h"
  18.  
  19. RcsId("$Header: /private/postgres/src/access/nbtree/RCS/nbtstrat.c,v 1.3 1991/04/24 19:11:31 mao Exp $");
  20.  
  21. /*
  22.  * Note:
  23.  *    StrategyNegate, StrategyCommute, and StrategyNegateCommute
  24.  *    assume <, <=, ==, >=, > ordering.
  25.  */
  26. static StrategyNumber    BTNegate[5] = {
  27.     BTGreaterEqualStrategyNumber,
  28.     BTGreaterStrategyNumber,
  29.     InvalidStrategy,
  30.     BTLessStrategyNumber,
  31.     BTLessEqualStrategyNumber
  32. };
  33.  
  34. static StrategyNumber    BTCommute[5] = {
  35.     BTGreaterStrategyNumber,
  36.     BTGreaterEqualStrategyNumber,
  37.     InvalidStrategy,
  38.     BTLessEqualStrategyNumber,
  39.     BTLessStrategyNumber
  40. };
  41.  
  42. static StrategyNumber    BTNegateCommute[5] = {
  43.     BTLessEqualStrategyNumber,
  44.     BTLessStrategyNumber,
  45.     InvalidStrategy,
  46.     BTGreaterStrategyNumber,
  47.     BTGreaterEqualStrategyNumber
  48. };
  49.  
  50. static uint16    BTLessTermData[] = {        /* XXX type clash */
  51.     2,
  52.     BTLessStrategyNumber,
  53.     NegateResult,
  54.     BTLessStrategyNumber,
  55.     NegateResult | CommuteArguments
  56. };
  57.  
  58. static uint16    BTLessEqualTermData[] = {    /* XXX type clash */
  59.     2,
  60.     BTLessEqualStrategyNumber,
  61.     0x0,
  62.     BTLessEqualStrategyNumber,
  63.     CommuteArguments
  64. };
  65.  
  66. static uint16    BTGreaterEqualTermData[] = {    /* XXX type clash */
  67.     2,
  68.     BTGreaterEqualStrategyNumber,
  69.     0x0,
  70.     BTGreaterEqualStrategyNumber,
  71.     CommuteArguments
  72. };
  73.  
  74. static uint16    BTGreaterTermData[] = {        /* XXX type clash */
  75.     2,
  76.     BTGreaterStrategyNumber,
  77.     NegateResult,
  78.     BTGreaterStrategyNumber,
  79.     NegateResult | CommuteArguments
  80. };
  81.  
  82. static StrategyTerm    BTEqualExpressionData[] = {
  83.     (StrategyTerm)BTLessTermData,        /* XXX */
  84.     (StrategyTerm)BTLessEqualTermData,        /* XXX */
  85.     (StrategyTerm)BTGreaterEqualTermData,    /* XXX */
  86.     (StrategyTerm)BTGreaterTermData,        /* XXX */
  87.     NULL
  88. };
  89.  
  90. static StrategyEvaluationData    BTEvaluationData = {
  91.     /* XXX static for simplicity */
  92.  
  93.     BTMaxStrategyNumber,
  94.     (StrategyTransformMap)BTNegate,    /* XXX */
  95.     (StrategyTransformMap)BTCommute,    /* XXX */
  96.     (StrategyTransformMap)BTNegateCommute,    /* XXX */
  97.  
  98.     NULL, NULL, (StrategyExpression)BTEqualExpressionData, NULL, NULL
  99.         /* XXX */
  100. };
  101.  
  102. /* ----------------------------------------------------------------
  103.  *    RelationGetBTStrategy
  104.  * ----------------------------------------------------------------
  105.  */
  106.  
  107. StrategyNumber
  108. _bt_getstrat(rel, attno, proc)
  109.     Relation    rel;
  110.     AttributeNumber    attno;
  111.     RegProcedure    proc;
  112. {
  113.     StrategyNumber    strat;
  114.  
  115.     strat = RelationGetStrategy(rel, attno, &BTEvaluationData, proc);
  116.  
  117.     Assert(StrategyNumberIsValid(strat));
  118.  
  119.     return (strat);
  120. }
  121.  
  122. bool
  123. _bt_invokestrat(rel, attno, strat, left, right)
  124.     Relation rel;
  125.     AttributeNumber attno;
  126.     StrategyNumber strat;
  127.     Datum left;
  128.     Datum right;
  129. {
  130.     return (RelationInvokeStrategy(rel, &BTEvaluationData, attno, strat, 
  131.                    left, right));
  132. }
  133.